关于python:如何避免“WindowsError:[错误5]访问被拒绝” |
您所在的位置:网站首页 › my documents拒绝访问 › 关于python:如何避免“WindowsError:[错误5]访问被拒绝” |
有重新创建文件夹的脚本: 12345# Remove folder (if exists) with all files if os.path.isdir(str(os.path.realpath('..') +"\\my_folder")): shutil.rmtree(os.path.realpath('..') +"\\my_folder", ignore_errors=True) # Create new folder os.mkdir(os.path.realpath('..') +"\\my_folder")这几乎总是有效,但在某些情况下(在创建步骤中),我得到了 1WindowsError: [Error 5] Access is denied: 'C:\\Path\\To\\my_folder'什么可能导致此错误,我该如何避免? 相关讨论 检查一下:stackoverflow.com/questions/12990112/权限可能是问题,但我在os.rename()上遇到了同样的问题'[错误5]拒绝访问',并且一次简单的重试循环能够在重试几次后重命名该文件。 123456for retry in range(100): try: os.rename(src_name,dest_name) break except: print"rename failed, retrying..." 相关讨论 这是一个很好的提示。据推测,如果它在绝大多数时间都有效,那么它的一些短暂问题,只是重试是失败前的正确选择。 如上所述,您无法判断您是否未能重命名。一个修复(并保持提升回溯正确)是except: if retry请参阅RemoveDirectory文档; "RemoveDirectory函数在关闭时标记要删除的目录。因此,在关闭目录的最后一个句柄之前,不会删除该目录。" 这意味着如果某些东西设法创建了一个删除目录的句柄(在创建和删除之间),那么实际上并没有删除该目录,而是"访问被拒绝", 要解决此问题,请在删除之前重命名要删除的目录。 所以 123while True: mkdir('folder 1') rmdir('folder 1')可以失败,解决; 12345while True: mkdir('folder 1') new_name = str(uuid4()) rename('folder 1', new_name) rmdir(new_name) 相关讨论 问题不再是实际问题,所以我无法检查。但我很确定这应该有效 我可以确认这个技巧有效。有趣的是,在调用rmdir之后,我正在使用os.path.exists()来检查文件夹是否已成功删除,然后再尝试重新创建它。即使os.path.exists(path)返回False,我仍然在运行os.mkdir(path)时遇到Access被拒绝错误。什么可能导致此错误? 您只是无权访问您正在为当前正在运行的进程(python.exe)编写的文件夹,或者甚至可能访问用户。除非您的用户是管理员,否则可能存在您没有写入权限的目录。 我怎么能避免呢? 通常,为了避免这种异常,可以使用try和except块,在这种情况下,它将是IOError。因此,如果您只是想忽略访问被拒绝并继续使用该脚本,您可以尝试: 123456789101112try: # Remove folder (if exists) with all files if os.path.isdir(str(os.path.realpath('..') +"\\my_folder")): shutil.rmtree(os.path.realpath('..') +"\\my_folder", ignore_errors=True) # Create new folder os.mkdir(os.path.realpath('..') +"\\my_folder") except IOError: print("Error upon either deleting or creating the directory or files.") else: print("Actions if file access was succesfull") finally: print("This will be executed even if an exception of IOError was encountered")如果你真的没想到这个错误而且不应该发生这种情况,你必须更改文件的权限。 根据您的用户权限,您可以采取各种步骤。 可以作为Admin:Option A执行程序的用户 右键单击cmd.exe。 单击以管理员身份运行。 通过cd转到您的脚本位置,因为除非您编辑了某些参数,否则它将在C:\Windows\system32处打开。 运行脚本> python myscript.py。可以作为Admin:Option B执行程序的用户 打开文件资源管理器。 转到您要写入的文件夹或文件夹。 右键单击它。 选择属性。 在属性窗口中,选择安全性选项卡。 单击编辑并根据需要进行编辑,或者需要授予对程序或用户的访问权限。没有管理员权限的用户: 这可能意味着它不是您的计算机。 如果在Uni或工作时检查PC帮助台,或者询问您的老师是否在学校。 如果您在家,并且您的计算机意味着您已使用非管理员用户登录。您创建的第一个通常是默认情况下。如果是,请检查"控制面板"中的用户设置。 从那以后休息几乎是一样的。 相关讨论 我尝试了这个答案的一切,但没有任何效果,它真的困扰我。 我遇到了同样的问题,它绝对不是权限问题。如果我在rmtree和mkdir之间放置几秒钟的睡眠,它每次都有效,但是如果我立即执行mkdir,它每次都会失败。 哇这个问题是老哈哈,事情是原来的提问者这么多改变了问题,我的回答基本上只是对于许可问题的概述。最初的问题就是在没有谈论异常的情况下无法访问文件夹,但他们实际上想要一个答案,没有例外被抛出所以你可能是对的对我来说,它以这种方式工作: 123while os.path.isdir (your_path): shutil.rmtree (your_path, ignore_errors=True) os.makedirs (your_path)创建您的python脚本文件。在这种情况下,您可以将其复制到C: WINDOWS system32中。脚本文件正在创建名为"Smaog"的文件夹 123import os os.chdir('C:/Program Files') os.makedirs('Smaog')在您喜欢的任何文件夹中创建批处理文件。 1234echo off title Renaming Folder python sample.py pause保存批处理文件。要运行它,请右键单击并选择以管理员身份运行 如果你不想把你的python脚本放在C: WINDOWS system32中,你可以选择这样做。 在批处理文件中,指明python脚本文件所在的文件夹/目录。 12345echo off title Renaming Folder cd c:\Users\Smaog\Desktop python sample.py pause然后按照上面的说明以管理员身份运行它。 之所以会发生这种情况,是因为您没有检查是否有权打开该路径。您需要更改这些文件夹的权限。 我把Py2切换到Py3之后昨晚遇到了这个问题,并意识到我正在为所有用户安装它。这意味着您将其安装到Program Files目录而不是%AppData%。大多数以管理员身份运行解决了这个问题,就像你上面的一些人所说,但我使用的是VSCode,有时甚至是PyCharm,并喜欢在其中使用终端。即使您尝试以管理员身份运行这些程序,在尝试专注于您可爱的代码时也会有很多烦人的时间。 我的解决方案:1)完全卸载(包括Py Launcher)2)然后使用提供的安装程序安装自定义安装但是... 3)不要选择INSTALL FOR ALL USERS选项。 我认为这将使你的日子更容易,没有任何"[错误5]"行在你的命令提示符,因为它对我有用。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |